import { IPSAppDEDataSet } from '../../app/dataentity/ipsapp-dedata-set';
import { IPSAppDEField } from '../../app/dataentity/ipsapp-defield';
import { IPSAppDataEntity } from '../../app/dataentity/ipsapp-data-entity';
import { IPSCodeList } from '../../codelist/ipscode-list';
import { IPSControlAction } from '../ipscontrol-action';
import { IPSControlContainer } from '../ipscontrol-container';
import { IPSControlNavigatable } from '../ipscontrol-navigatable';
import { IPSMDAjaxControl } from '../ipsmdajax-control';
import { IPSMDControl2 } from '../ipsmdcontrol2';
import { IPSDEGridColumn } from './ipsdegrid-column';
import { IPSDEGridDataItem } from './ipsdegrid-data-item';
import { IPSDEGridEditItem } from './ipsdegrid-edit-item';
import { IPSDEGridEditItemUpdate } from './ipsdegrid-edit-item-update';
import { IPSDEGridEditItemVR } from './ipsdegrid-edit-item-vr';
import { IPSLayoutPanel } from '../panel/ipslayout-panel';
import { IPSDEField } from '../../dataentity/defield/ipsdefield';
import { IPSLanguageRes } from '../../res/ipslanguage-res';

/**
 *
 * 子接口类型识别属性[]
 * 继承父接口类型值[GRID]
 * @export
 * @interface IPSDEGrid
 */
export interface IPSDEGrid extends IPSMDAjaxControl, IPSControlContainer, IPSControlNavigatable, IPSMDControl2 {
  /**
   * 表格聚合模式
   * @description 值模式 [表格聚合模式] {NONE：无聚合、 PAGE：当前页本地、 ALL：全部远程 }
   * @type {( string | 'NONE' | 'PAGE' | 'ALL')}
   */
  aggMode: string | 'NONE' | 'PAGE' | 'ALL';

  /**
   * 聚合服务应用实体数据集
   *
   * @type {IPSAppDEDataSet}
   */
  getAggPSAppDEDataSet(): IPSAppDEDataSet | null;

  /**
   * 聚合服务应用实体数据集
   *
   * @type {IPSAppDEDataSet}
   */
  get aggPSAppDEDataSet(): IPSAppDEDataSet | null;

  /**
   * 聚合服务应用实体数据集（必须存在）
   *
   * @type {IPSAppDEDataSet}
   */
  getAggPSAppDEDataSetMust(): IPSAppDEDataSet;

  /**
   * 聚合服务应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  getAggPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 聚合服务应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  get aggPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 聚合服务应用实体对象（必须存在）
   *
   * @type {IPSAppDataEntity}
   */
  getAggPSAppDataEntityMust(): IPSAppDataEntity;

  /**
   * 聚合数据布局面板
   *
   * @type {IPSLayoutPanel}
   */
  getAggPSLayoutPanel(): IPSLayoutPanel | null;

  /**
   * 聚合数据布局面板
   *
   * @type {IPSLayoutPanel}
   */
  get aggPSLayoutPanel(): IPSLayoutPanel | null;

  /**
   * 聚合数据布局面板（必须存在）
   *
   * @type {IPSLayoutPanel}
   */
  getAggPSLayoutPanelMust(): IPSLayoutPanel;

  /**
   * 列过滤器模式
   * @description 值模式 [实体表格链接模式] {0：不启用、 1：启用、 2：启用（自动判断） }
   * @type {( number | 0 | 1 | 2)}
   */
  columnEnableFilter: number | 0 | 1 | 2;

  /**
   * 列链接模式
   * @description 值模式 [实体表格链接模式] {0：不启用、 1：启用、 2：启用（自动判断） }
   * @type {( number | 0 | 1 | 2)}
   */
  columnEnableLink: number | 0 | 1 | 2;

  /**
   * 建立数据行为
   *
   * @type {IPSControlAction}
   */
  getCreatePSControlAction(): IPSControlAction | null;

  /**
   * 建立数据行为
   *
   * @type {IPSControlAction}
   */
  get createPSControlAction(): IPSControlAction | null;

  /**
   * 建立数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getCreatePSControlActionMust(): IPSControlAction;

  /**
   * 无值显示内容
   * @type {string}
   */
  emptyText: string;

  /**
   * 无值内容语言资源
   *
   * @type {IPSLanguageRes}
   */
  getEmptyTextPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 无值内容语言资源
   *
   * @type {IPSLanguageRes}
   */
  get emptyTextPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 无值内容语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getEmptyTextPSLanguageResMust(): IPSLanguageRes;

  /**
   * 固定起始列数
   * @type {number}
   * @default 0
   */
  frozenFirstColumn: number;

  /**
   * 固定末尾列数
   * @type {number}
   * @default 0
   */
  frozenLastColumn: number;

  /**
   * 获取草稿数据行为（拷贝）
   *
   * @type {IPSControlAction}
   */
  getGetDraftFromPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为（拷贝）
   *
   * @type {IPSControlAction}
   */
  get getDraftFromPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为（拷贝）（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetDraftFromPSControlActionMust(): IPSControlAction;

  /**
   * 获取草稿数据行为
   *
   * @type {IPSControlAction}
   */
  getGetDraftPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为
   *
   * @type {IPSControlAction}
   */
  get getDraftPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetDraftPSControlActionMust(): IPSControlAction;

  /**
   * 获取数据行为
   *
   * @type {IPSControlAction}
   */
  getGetPSControlAction(): IPSControlAction | null;

  /**
   * 获取数据行为
   *
   * @type {IPSControlAction}
   */
  get getPSControlAction(): IPSControlAction | null;

  /**
   * 获取数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetPSControlActionMust(): IPSControlAction;

  /**
   * 表格样式
   * @description 值模式 [云实体表格样式] {TREEGRID：树表格、 GROUPGRID：分组表格、 LIST：单列无头表格（列表）、 LIST_SORT：单列无头表格（列表），支持排序、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'TREEGRID' | 'GROUPGRID' | 'LIST' | 'LIST_SORT' | 'USER' | 'USER2')}
   */
  gridStyle: string | 'TREEGRID' | 'GROUPGRID' | 'LIST' | 'LIST_SORT' | 'USER' | 'USER2';

  /**
   * 分组模式
   * @description 值模式 [多数据部件分组模式] {NONE：无分组、 AUTO：自动分组、 CODELIST：分组代码表 }
   * @type {( string | 'NONE' | 'AUTO' | 'CODELIST')}
   */
  groupMode: string | 'NONE' | 'AUTO' | 'CODELIST';

  /**
   * 分组应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getGroupPSAppDEField(): IPSAppDEField | null;

  /**
   * 分组应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get groupPSAppDEField(): IPSAppDEField | null;

  /**
   * 分组应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getGroupPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 分组代码表
   *
   * @type {IPSCodeList}
   */
  getGroupPSCodeList(): IPSCodeList | null;

  /**
   * 分组代码表
   *
   * @type {IPSCodeList}
   */
  get groupPSCodeList(): IPSCodeList | null;

  /**
   * 分组代码表（必须存在）
   *
   * @type {IPSCodeList}
   */
  getGroupPSCodeListMust(): IPSCodeList;

  /**
   * 分组实体属性
   *
   * @type {IPSDEField}
   */
  getGroupPSDEField(): IPSDEField | null;

  /**
   * 分组实体属性
   *
   * @type {IPSDEField}
   */
  get groupPSDEField(): IPSDEField | null;

  /**
   * 分组实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getGroupPSDEFieldMust(): IPSDEField;

  /**
   * 附加排序方向
   * @description 值模式 [字段排序方向] {ASC：升序、 DESC：降序 }
   * @type {( string | 'ASC' | 'DESC')}
   */
  minorSortDir: string | 'ASC' | 'DESC';

  /**
   * 附加排序应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getMinorSortPSAppDEField(): IPSAppDEField | null;

  /**
   * 附加排序应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get minorSortPSAppDEField(): IPSAppDEField | null;

  /**
   * 附加排序应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getMinorSortPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 排序值应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getOrderValuePSAppDEField(): IPSAppDEField | null;

  /**
   * 排序值应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get orderValuePSAppDEField(): IPSAppDEField | null;

  /**
   * 排序值应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getOrderValuePSAppDEFieldMust(): IPSAppDEField;

  /**
   * 表格列集合
   *
   * @type {IPSDEGridColumn[]}
   */
  getPSDEGridColumns(): IPSDEGridColumn[] | null;

  /**
   * 表格列集合
   *
   * @type {IPSDEGridColumn[]}
   */
  get psDEGridColumns(): IPSDEGridColumn[] | null;

  findPSDEGridColumn(objKey: any): IPSDEGridColumn | null;

  /**
   * 表格数据项集合
   *
   * @type {IPSDEGridDataItem[]}
   */
  getPSDEGridDataItems(): IPSDEGridDataItem[] | null;

  /**
   * 表格数据项集合
   *
   * @type {IPSDEGridDataItem[]}
   */
  get psDEGridDataItems(): IPSDEGridDataItem[] | null;

  findPSDEGridDataItem(objKey: any): IPSDEGridDataItem | null;

  /**
   * 表格编辑项更新集合
   *
   * @type {IPSDEGridEditItemUpdate[]}
   */
  getPSDEGridEditItemUpdates(): IPSDEGridEditItemUpdate[] | null;

  /**
   * 表格编辑项更新集合
   *
   * @type {IPSDEGridEditItemUpdate[]}
   */
  get psDEGridEditItemUpdates(): IPSDEGridEditItemUpdate[] | null;

  findPSDEGridEditItemUpdate(objKey: any): IPSDEGridEditItemUpdate | null;

  /**
   * 表格编辑项值规则集合
   *
   * @type {IPSDEGridEditItemVR[]}
   */
  getPSDEGridEditItemVRs(): IPSDEGridEditItemVR[] | null;

  /**
   * 表格编辑项值规则集合
   *
   * @type {IPSDEGridEditItemVR[]}
   */
  get psDEGridEditItemVRs(): IPSDEGridEditItemVR[] | null;

  findPSDEGridEditItemVR(objKey: any): IPSDEGridEditItemVR | null;

  /**
   * 表格编辑项集合
   *
   * @type {IPSDEGridEditItem[]}
   */
  getPSDEGridEditItems(): IPSDEGridEditItem[] | null;

  /**
   * 表格编辑项集合
   *
   * @type {IPSDEGridEditItem[]}
   */
  get psDEGridEditItems(): IPSDEGridEditItem[] | null;

  findPSDEGridEditItem(objKey: any): IPSDEGridEditItem | null;

  /**
   * 分页大小
   * @type {number}
   */
  pagingSize: number;

  /**
   * 删除数据行为
   *
   * @type {IPSControlAction}
   */
  getRemovePSControlAction(): IPSControlAction | null;

  /**
   * 删除数据行为
   *
   * @type {IPSControlAction}
   */
  get removePSControlAction(): IPSControlAction | null;

  /**
   * 删除数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getRemovePSControlActionMust(): IPSControlAction;

  /**
   * 排序模式
   * @description 值模式 [表格排序模式] {REMOTE：远程排序、 LOCAL：本地排序 }
   * @type {( string | 'REMOTE' | 'LOCAL')}
   */
  sortMode: string | 'REMOTE' | 'LOCAL';

  /**
   * 更新数据行为
   *
   * @type {IPSControlAction}
   */
  getUpdatePSControlAction(): IPSControlAction | null;

  /**
   * 更新数据行为
   *
   * @type {IPSControlAction}
   */
  get updatePSControlAction(): IPSControlAction | null;

  /**
   * 更新数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getUpdatePSControlActionMust(): IPSControlAction;

  /**
   * 启用列过滤器
   * @type {boolean}
   */
  enableColFilter: boolean;

  /**
   * 支持表格定制
   * @type {boolean}
   */
  enableCustomized: boolean;

  /**
   * 启用分组
   * @type {boolean}
   */
  enableGroup: boolean;

  /**
   * 支持分页栏
   * @type {boolean}
   */
  enablePagingBar: boolean;

  /**
   * 支持行编辑
   * @type {boolean}
   */
  enableRowEdit: boolean;

  /**
   * 支持行次序调整
   * @type {boolean}
   */
  enableRowEditOrder: boolean;

  /**
   * 支持行新建
   * @type {boolean}
   */
  enableRowNew: boolean;

  /**
   * 适应屏幕宽度
   * @type {boolean}
   */
  forceFit: boolean;

  /**
   * 隐藏表格头部
   * @type {boolean}
   */
  hideHeader: boolean;

  /**
   * 默认禁用排序
   * @type {boolean}
   */
  noSort: boolean;

  /**
   * 单项选择
   * @type {boolean}
   */
  singleSelect: boolean;
}
